package com.hedl.practice.diyJava.gather.study_collections.test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> list = Collections.emptyList();        //无法向其中添加或删除元素。

        List<String> list1 = Arrays.asList();       //可以初始化添加元素

        List<String> list2 = Collections.singletonList("apple");        //可以初始化添加单个元素，
        System.out.println(list2);

        System.out.println("=============================================");
        //排序
        List<String> list3 = new ArrayList<>();
        list3.add("apple");
        list3.add("pear");
        list3.add("orange");
        //排序前
        System.out.println(list3);
        //排序后
        Collections.sort(list3);
        System.out.println(list3);

        System.out.println("=============================================");
        //洗牌算法
        List<Integer> list4 = new ArrayList<>();
        for (int i = 0; i <= 10; i++){
            list4.add(i);
        }
        //洗牌前
        System.out.println(list4);
        //洗牌后
        Collections.shuffle(list4);
        System.out.println(list4);

        System.out.println("=============================================");

        //可变集合封装成不可变集合
        List<String> list5 = new ArrayList<>();
        list5.add("apple");
        list5.add("pear");
        // 变为不可变集合:
        List<String> immutable = Collections.unmodifiableList(list5);
        //immutable.add("orange");        //UnsupportedOperationException!    报错
        //对原始集合进行增删是可以的
        list5.add("orange");
        System.out.println("原始集合："+list5);

        /**
         * 如果我们希望把一个可变List封装成不可变List，那么，返回不可变List后，最好立刻扔掉可变List的引用，
         * 这样可以保证后续操作不会意外改变原始对象，从而造成“不可变”List变化了
         */
        //立刻扔掉mutable的引用:
        list5 = null;
        System.out.println(immutable);

        list5.add("aaaa");      //无法添加，会报错NullPointerException，因为上面扔掉了"list5 = null;"
        System.out.println("扔掉后的原始集合："+list5);
    }
}
